package com.ruoyi.system.service;

import java.util.List;
import java.util.Map;

import javax.sql.DataSource;
import com.ruoyi.system.domain.SysDatasource;

/**
 * 数据源配置Service接口
 * 
 * @author ruoyi
 */
public interface ISysDatasourceService
{
    /**
     * 查询数据源配置
     * 
     * @param datasourceId 数据源配置ID
     * @return 数据源配置
     */
    public SysDatasource selectDatasourceById(Long datasourceId);

    /**
     * 根据数据源编码查询数据源配置
     * 
     * @param datasourceCode 数据源编码
     * @return 数据源配置
     */
    public SysDatasource selectDatasourceByCode(String datasourceCode);

    /**
     * 查询数据源配置列表
     * 
     * @param datasource 数据源配置
     * @return 数据源配置集合
     */
    public List<SysDatasource> selectDatasourceList(SysDatasource datasource);

    /**
     * 新增数据源配置
     * 
     * @param datasource 数据源配置
     * @return 结果
     */
    public int insertDatasource(SysDatasource datasource);

    /**
     * 修改数据源配置
     * 
     * @param datasource 数据源配置
     * @return 结果
     */
    public int updateDatasource(SysDatasource datasource);

    /**
     * 批量删除数据源配置
     * 
     * @param datasourceIds 需要删除的数据源配置ID
     * @return 结果
     */
    public int deleteDatasourceByIds(Long[] datasourceIds);

    /**
     * 删除数据源配置信息
     * 
     * @param datasourceId 数据源配置ID
     * @return 结果
     */
    public int deleteDatasourceById(Long datasourceId);

    /**
     * 校验数据源编码是否唯一
     * 
     * @param datasource 数据源配置
     * @return 结果
     */
    public String checkDatasourceCodeUnique(SysDatasource datasource);

    /**
     * 测试数据源连接
     * 
     * @param datasource 数据源配置
     * @return 结果
     */
    public boolean testDatasourceConnection(SysDatasource datasource);

    /**
     * 初始化数据源连接池
     * 
     * @param datasource 数据源配置
     * @return 数据源对象
     */
    public DataSource initDataSource(SysDatasource datasource);

    /**
     * 刷新动态数据源
     * 
     * @return 结果
     */
    public boolean refreshDynamicDatasource();

    /**
     * 查询所有启用的数据源
     * 
     * @return 数据源列表
     */
    public List<SysDatasource> selectEnabledDatasource();

    /**
     * 获取数据源状态信息
     * 
     * @param datasourceCode 数据源编码
     * @return 状态信息
     */
    public Map<String, Object> getDatasourceStatus(String datasourceCode);
}